\subsection{Netzplan}

Die unterschiedlichen Module kommunizieren untereinander über Internet mithilfe von mittels TLS verschlüsselten Tunnels. Die Verbindungen werden in Abbildung \ref{network} dargestellt. Der Einfachheit halber werden die Verbindungen zur \CA{} und zur \TSA{} in der Grafik nicht dargestellt, da alle Module des Systems TLS-Verbindungen zu diesen Komponenten aufbauen.

\begin{figure}[ht]
    \includegraphics[width=14cm]{imgs/netzwerk2.pdf}
    \centering
    \label{network}
    \caption{Netzwerkplan des Systems}
\end{figure}

\subsection{Allgemeine Sicherheitsmaßnahmen}

\begin{enumerate}[label=\Alph*, align=left]
    \item \label{safeprivkey} Das System implementiert eine Public-Key-Infrastruktur (PKI). Jedes Modul besitzt einen Private Key, der vor Fremdzugriff geschützt sein muss, und die Public Keys aller bekannten Kommunikationspartner.

    \item \label{ca} Eine \CA{} verwaltet die Zertifikate aller externen Partner. Dabei werden Public Keys der Karten-Terminals, der Self-Management-Webseite und des Mitarbeiter-Backends direkt von dieser \CA{} verwaltet, während zur Prüfung bekannter, externer Dienste wie dem Telekommunikations-Dienstleister auf vertrauenswürdige, externe \CAs{} zurückgegriffen werden kann. Public Keys müssen vor Anwendung (bei Signatur-Prüfung und Verschlüsselung) bei dieser \CA{} \emph{immer} auf Gültigkeit überprüft werden.

    \item \label{tls} Die Kommunikation sämtlicher Module untereinander erfolgt über Tunnel, die mittels TLS verschlüsselt sind. Vor Beginn der Kommunikation müssen sich beide Kommunikationspartner authentifizieren.

    \item \label{knownips} Sämtliche Schnittstellen akzeptieren nur Verbindungen von bekannten IP-Adressen. Verbindungen von unbekannten IP-Adressen werden abgelehnt.

    \item \label{encrpyt} Alle Daten, die auf lokalen Datenbanksystemen abgelegt werden, werden verschlüsselt gespeichert. Die SHA-256 Hashwerte der Primary und Secondary Keys werden in zusätzlichen Feldern gespeichert, um die Vorbereitungszeit von Anfragen in der Applikation zu verkürzen.

    \item \label{signonsave} Bei jeder Änderung muss ein Datensatz von seinem eigenen Modul signiert werden. Etwaige andere Signaturen werden dabei mit signiert. Diese Signatur wird gespeichert.

    \item \label{verifyonload} Die Signatur der aus Datenbanken gelesenen Daten muss vor einer weiteren Verarbeitung überprüft werden.

    \item \label{authfirst} Die verschlüsselten Daten werden erst nach korrekter Authentifzierung des Kommunikationspartners und nur bei entsprechend vorhandenen Rechten entschlüsselt.

    \item \label{keepdata} Kunden- und Kreditkartendaten werden nicht sofort tatsächlich gelöscht, sondern werden zunächst nur als gesperrt bzw. ungültig markiert und erst nach 5 Jahren tatsächlich gelöscht.

    \item \label{sqlinj} Einkommende Anfragen bei den Schnittstellen der Module müssen gegen SQL- und Command-Injection geprüft und im Zweifelsfall abgelehnt werden, um die Verarbeitung potenziell schadhafter Daten zu verhindern.

    \item \label{tsa} Jeder Datensatz hat ein Feld "`Zeitpunkt der letzten Änderung"', das datenbankseitig bei jeder Änderung angepasst wird. Außerdem werden Datensätze bei jeder Änderung von der \TSA{} signiert. Diese Signatur wird mitgespeichert.

    \item \label{encryptbeforetsa} Datensätze dürfen erst nach der Verschlüsselung zur Signatur an die TSA gesendet werden.

    \item \label{versioning} Änderungen an Datensätzen müssen datenbankseitig versioniert werden. Die Versionierung muss die geänderten Werte (vorher und nachher) sowie den Benutzername des Benutzers, der die Änderung durchgeführt hat, enthalten.

    \item \label{safeversioning} Einmal versionierte Werte dürfen nicht mehr änderbar sein. Versionen müssen durch das speichernde Modul signiert werden.

    \item \label{sepadmin} Es muss für jedes Modul zwei Administratoren geben. Der eine Administrator hat vollen Zugriff auf die Datenbank, aber nicht auf den Private Key des Moduls oder die akzeptierten IP-Adressen. Der andere Administrator hat Zugriff auf den Private Key sowie auf die Tabellen mit den akzeptierten IP-Adressen, aber nicht auf die Datenbank.
\end{enumerate}

\subsection{Kunden-Management}

\input{kundenmanagement}

\subsection{Kartenverwaltung}

\input{kartenverwaltung}

\subsection{Transaktionsverwaltung}

\input{transaktionsverwaltung}

\subsection{Benachrichtigungssystem}

\input{benachrichtigungssystem}